<?php
/**
 * Hesperos library for Zend Framework
 *
 * This script is protected by copyright. It's use, copying, modification
 * and distribution without written consent of the author is prohibited.
 *
 * @category    Hesperos
 * @package     Config
 * @author      Krzysztof Kardasz <krzysztof.kardasz@gmail.com>
 * @copyright   Copyright (c) 2011 Krzysztof Kardasz
 * @license     http://www.gnu.org/licenses/lgpl-3.0.txt  GNU Lesser General Public
 * @version     1.0 $Id: Manager.php 10 2011-05-13 11:44:11Z krzysztof.kardasz $
 * @link        http://code.google.com/p/hesperos/
 */

/**
 * Menadżer konfiguracji
 *
 * @category    Hesperos
 * @package     Config
 * @author      Krzysztof Kardasz <krzysztof.kardasz@gmail.com>
 * @copyright   Copyright (c) 2011 Krzysztof Kardasz
 * @version     1.0 $Id: Manager.php 10 2011-05-13 11:44:11Z krzysztof.kardasz $
 */
class Hesperos_Config_Manager
{
    /**
     * Kolekcja obiektów klasy Zend_Config
     *
     * @var Zend_Config []
     */
    private static $_configs = array();

    /**
     * Zwraca obiekt klasy Zend_Config_Ini
     * Automatycznie przechowuje obiekty w pamięci podręcznej (nazwa obiektu dla menadżera: config)
     *
     * @param  string $name plik konfiguracyjny
     * @param  null|string $section sekcja
     * @param  null|string $dir katalog
     * @return Zend_Config_Ini
     */
    public static function getConfigIni ($name, $section = null, $dir = null)
    {
        if(null === $dir) {
            $dir = APPLICATION_PATH . '/configs';
        }
        $file = $dir . DIRECTORY_SEPARATOR . $name;
        $key  = sha1($file . $section);
        if(!isset(self::$_configs[$key])) {
            $cache = Hesperos_Cache_Manager::getConfig();
            if(!$cache || ($data = $cache->load($key)) === false) {
                $data = new Zend_Config_Ini($file, $section);
                if ($cache) {
                    $cache->save($data, $key);
                }
            }
            self::$_configs[$key] = $data;
        }
        return self::$_configs[$key];
    }

    /**
     * Zwraca obiekt klasy Zend_Config
     * Automatycznie przechowuje obiekty w pamięci podręcznej (nazwa obiektu dla menadżera: config)
     *
     * @param  string $name plik konfiguracyjny
     * @param  null|string $dir katalog
     * @return Zend_Config
     */
    public static function getConfigPhp ($name, $dir = null)
    {
        if(null === $dir) {
            $dir = APPLICATION_PATH . '/configs';
        }
        $file = $dir . DIRECTORY_SEPARATOR . $name;
        $key  = sha1($file);
        if(!isset(self::$_configs[$key])) {
            $cache = Hesperos_Cache_Manager::getConfig();
            if(!$cache || ($data = $cache->load($key)) === false) {
                $data = new Zend_Config(include $file);
                if ($cache) {
                    $cache->save($data, $key);
                }
            }
            self::$_configs[$key] = $data;
        }
        return self::$_configs[$key];
    }
}